

 // dataType 返回值的类型   json  string
 function ajax(options) {

    const {type , url , data = {} , dataType = 'json' , async = true , success} = options ;


    // 判断传参是否正确
    // 判断type 请求方式只能是get / post
    if(type.toLowerCase() !== 'get' && type.toLowerCase() !== 'post') throw new Error('请求方式type暂时支持get或者post这两种方式') ;
    // 判断url
    if(typeof url !== 'string') throw new Error('请求的接口路径错误') ;
    // 判断data
    if(Object.prototype.toString.call(data) !== '[object Object]') throw new Error('前端携带的数据data必须是对象') 
    // dataType
    if(dataType !== 'json' && dataType !== 'string') throw new Error('返回值类型dataType只能是json或者string')
    // async
    if(typeof async !== 'boolean') throw new Error('ajax同步异步只能用布尔值表示') 
    // success
    if(typeof success !== 'function') throw new Error('success 必须是一个函数') 
  

    let params = '' ;
    for(let key in data) {
        params += `${key}=${data[key]}&` ;
    }
    params = params.substr(0 , params.length - 1) ;
    // console.log(params);


    const xhr = new XMLHttpRequest() ;

    // 判断请求方式
    if(type.toLowerCase() === 'get') {
        xhr.open('get' , url + '?' + params , async) ;
        xhr.send() ;
    }

    else if(type.toLowerCase() === 'post') {
        xhr.open('post' , url , async) ;
        xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');
        xhr.send(params) ;
    }

   
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            let data = xhr.responseText ;
            // 判断返回值的类型
            if(dataType.toLowerCase() === 'json') {
                data = JSON.parse(data) ;
            } 
            // console.log(data);
            // 拿到数据以后  要把这个数据进行其他处理
            success(data) ;
        }
    }
}